/* ================================================================
*   Copyright (C) 2020 All rights reserved.
*
*   文件名称：xhash.h
*   创 建 者：hanqing
*   创建日期：2020年08月05日
*   描    述：
*
================================================================ */


#ifndef XHASH_H
#define XHASH_H

template <class _K> struct xhash {
    size_t operator()(const _K & key) const {
        return (size_t)key;
    }
};

inline size_t _default_str_hash(const char * s) {
    size_t result = 0;
    for (; *s; ++s) {
        result = result * 101 + *s;
    }
    return result;
}

template <> struct xhash<std::string> {
    size_t operator()(const std::string & key) const {
        return _default_str_hash(key.c_str());
    }
};

template <> struct xhash<const std::string> {
    size_t operator()(const std::string & key) const
    {
        return _default_str_hash(key.c_str());
    }
};

template<> struct xhash<char*>
{
    size_t operator()(const char* key) const
    {
        return _default_str_hash(key);
    }
};

template<> struct xhash<const char*>
{
    size_t operator()(const char* key) const
    {
        return _default_str_hash(key);
    }
};

#endif
